﻿// ***********************************************************************
// Apache 2.0 License
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY 
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR 
// PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing
// permissions and limitations under the License.
// ***********************************************************************
// Assembly  : ContractMeow.Api.Dtos
// File      : UploadResponseEnvelope.cs
//
// ***********************************************************************
using ContractMeow.Api.Dtos.Attachment;
using ContractMeow.Api.Dtos.Serialization;
using Newtonsoft.Json;
using System;

namespace ContractMeow.Api.Dtos
{
	public sealed class UploadResponseEnvelope : AttachmentBase, IFileAttachment
	{

		#region IAttachment

		/// <summary>
		/// Gets the type.
		/// </summary>
		/// <value>The type.</value>
		[JsonProperty("type")]
		public override String Type { get; set; }

		#endregion

		#region IFileAttachment
		/// <summary>
		/// Gets or sets the content class.
		/// </summary>
		/// <value>The content class.</value>
		[JsonProperty("content_class")]
		public String ContentClass { get; set; }

		/// <summary>
		/// Gets or sets the type of the content.
		/// </summary>
		/// <value>The type of the content.</value>
		[JsonProperty("content_type")]
		public String ContentType { get; set; }

		/// <summary>
		/// Gets or sets the download URL.
		/// </summary>
		/// <value>The download URL.</value>
		[JsonProperty("download_url")]
		public Uri DownloadUrl { get; set; }

		/// <summary>
		/// Gets or sets the file.
		/// </summary>
		/// <value>The file.</value>
		public File File { get; set; }

		/// <summary>
		/// Gets or sets the full name.
		/// </summary>
		/// <value>The full name.</value>
		[JsonProperty("full_name")]
		public String FullName { get; set; }

		/// <summary>
		/// Gets or sets the large icon URL.
		/// </summary>
		/// <value>The large icon URL.</value>
		[JsonProperty("large_icon_url")]
		public Uri LargeIconUrl { get; set; }

		/// <summary>
		/// Gets or sets the last uploaded at.
		/// </summary>
		/// <value>The last uploaded at.</value>
		[JsonProperty("last_uploaded_at")]
		public DateTimeOffset LastUploadedAt { get; set; }

		/// <summary>
		/// Gets or sets the last uploaded by id.
		/// </summary>
		/// <value>The last uploaded by id.</value>
		[JsonProperty("last_uploaded_by_id")]
		public Int64 LastUploadedById { get; set; }

		/// <summary>
		/// Gets or sets the last type of the uploaded by.
		/// </summary>
		/// <value>The last type of the uploaded by.</value>
		[JsonProperty("last_uploaded_by_type")]
		public String LastUploadedByType { get; set; }

		/// <summary>
		/// Gets or sets the is official.
		/// </summary>
		/// <value>The is official.</value>
		[JsonProperty("official")]
		public Boolean IsOfficial { get; set; }

		/// <summary>
		/// Gets or sets the name of the original.
		/// </summary>
		/// <value>The name of the original.</value>
		[JsonProperty("original_name")]
		public String OriginalName { get; set; }

		/// <summary>
		/// Gets or sets the overlay URL.
		/// </summary>
		/// <value>The overlay URL.</value>
		[JsonProperty("overlay_url")]
		public Uri OverlayUrl { get; set; }

		/// <summary>
		/// Gets or sets the owner id.
		/// </summary>
		/// <value>The owner id.</value>
		[JsonProperty("owner_id")]
		public Int64 OwnerId { get; set; }

		/// <summary>
		/// Gets or sets the type of the onwer.
		/// </summary>
		/// <value>The type of the onwer.</value>
		[JsonProperty("owner_type")]
		public String OwnerType { get; set; }

		/// <summary>
		/// Gets or sets the path.
		/// </summary>
		/// <value>The path.</value>
		[JsonProperty("path")]
		public String Path { get; set; }

		/// <summary>
		/// Gets or sets the preview URL.
		/// </summary>
		/// <value>The preview URL.</value>
		[JsonProperty("preview_url")]
		public Uri PreviewUrl { get; set; }

		/// <summary>
		/// Gets or sets the is public.
		/// </summary>
		/// <value>The is public.</value>
		[JsonProperty("privacy")]
		[JsonConverter(typeof(PrivacyJsonConverter))]
		public Boolean IsPublic { get; set; }

		/// <summary>
		/// Gets or sets the type of the real.
		/// </summary>
		/// <value>The type of the real.</value>
		[JsonProperty("real_type")]
		public String RealType { get; set; }

		/// <summary>
		/// Gets or sets the size.
		/// </summary>
		/// <value>The size.</value>
		[JsonProperty("size")]
		public Int64 Size { get; set; }

		/// <summary>
		/// Gets or sets the small icon URL.
		/// </summary>
		/// <value>The small icon URL.</value>
		[JsonProperty("small_icon_url")]
		public Uri SmallIconUrl { get; set; }

		/// <summary>
		/// Gets or sets the streaming URL.
		/// </summary>
		/// <value>The streaming URL.</value>
		[JsonProperty("streaming_url")]
		public Uri StreamingUrl { get; set; }

		/// <summary>
		/// Gets or sets the thumbnail URL.
		/// </summary>
		/// <value>The thumbnail URL.</value>
		[JsonProperty("thumbnail_url")]
		public Uri ThumbnailUrl { get; set; }

		/// <summary>
		/// Gets or sets the transcoded.
		/// </summary>
		/// <value>The transcoded.</value>
		[JsonProperty("transcoded")]
		public Boolean? Transcoded { get; set; }

		/// <summary>
		/// Gets or sets the UUID.
		/// </summary>
		/// <value>The UUID.</value>
		[JsonProperty("uuid")]
		public String Uuid { get; set; }

		/// <summary>
		/// Gets or sets the Y id.
		/// </summary>
		/// <value>The Y id.</value>
		[JsonProperty("y_id")]
		public Int64 YId { get; set; }
		#endregion
	}
}
